package com.jzo2o.health.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.jzo2o.api.trade.dto.response.NativePayResDTO;
import com.jzo2o.api.trade.dto.response.TradingResDTO;
import com.jzo2o.common.model.PageResult;
import com.jzo2o.health.model.domain.Orders;
import com.jzo2o.health.model.dto.request.OrdersCancelReqDTO;
import com.jzo2o.health.model.dto.request.OrdersPageQueryReqDTO;
import com.jzo2o.health.model.dto.request.PlaceOrderReqDTO;
import com.jzo2o.health.model.dto.response.*;

import java.time.LocalDateTime;
import java.util.List;

public interface IOrdersService extends IService<Orders> {

    /**
     * 下单接口
     *
     * @param dto
     * @return
     */
    //下单接口
    PlaceOrderResDTO place(PlaceOrderReqDTO dto);

    //订单二维码生成后更新订单表数据
    void updateOrder(Long id, NativePayResDTO nativePayResDTO);

    //查询订单支付结果
    OrdersPayResDTO payResult(Long id);

    //订单支付成功，更新订单状态
    void paySuccess(Long orderId, String transactionId, LocalDateTime paySuccessTime);

    //订单取消
    void cancel(OrdersCancelReqDTO ordersCancelReqDTO);

    //取消未支付订单
    void cancelOrderByNoPay(Long orderId, String cancelReason, boolean isSystem);

    //订单退款
    void refund(OrdersCancelReqDTO ordersCancelReqDTO);

    //更新订单取消表
    void updateOrderCancelled(Orders orders, OrdersCancelReqDTO ordersCancelReqDTO);

    //更新退款记录表
    void updateOrdersRefund(Orders orders);

    //滚动分页查询
    List<OrdersResDTO> pageQueryForUser(Integer ordersStatus, Long sortBy);

    //根据订单id查询
    OrdersDetailResDTO getByIdForUser(Long id);

    //管理端分页查询
    PageResult<OrdersResDTO> pageQueryForAdmin(OrdersPageQueryReqDTO ordersPageQueryReqDTO);

    //根据状态统计数量
    OrdersCountResDTO countByStatus();

    //管理端根据订单id查询
    AdminOrdersDetailResDTO getByIdForAdmin(Long id);
}